package com.nys.conci.base.excepcion;

import com.nys.conci.base.utilitario.MensajeUtil;
import com.nys.conci.base.utilitario.logger.LoggerUtil;
import javax.ejb.EJBException;

/**
 * Clase utilitaria para manejar las excepciones. Se encarga de mostrar los mensajes
 * de dicha excepcion.
 * 
 * @author Adam M. Gamboa González
 * @since 05 de Marzo 2011
 */
public class ExcepcionManager {
    
    /**
     * Metodo encargado de manejar la excepcion. Dependiendo del tipo de excepcion
     * muestra y registra un distinto tipo de mensaje. Es decir, para excepcion de
     * la logica de aplicación son tomadas como errores normales, cualquier otro tipo
     * de excepcion es tomada como un error Fatal.
     * 
     * @param ex Exception a manejar
     */
    public static void manejarExcepcion(Exception ex){
        if (ex instanceof ExcepcionServicio) {//errores de logica de negocios
            ExcepcionServicio esex = (ExcepcionServicio) ex;
            String mensaje = esex.getMessage() != null ? esex.getMessage() : "";
            MensajeUtil.agregarMensajeError(mensaje);
            LoggerUtil.registrarLogError(ex, true);
        } 
        else if(ex instanceof EJBException && ex.getCause() instanceof ExcepcionServicio){
            ExcepcionServicio esex = (ExcepcionServicio) ex.getCause();
            String mensaje = esex.getMessage() != null ? esex.getMessage() : "";
            MensajeUtil.agregarMensajeError(mensaje);
            LoggerUtil.registrarLogError(esex, true);
        }       
        else {//Un error inesperado, o que no fue capturado por la logica del negocio.
            String mensaje = ex.getMessage() != null ? ex.getMessage() : "";
            MensajeUtil.agregarMensajeFatal(mensaje);
            LoggerUtil.registrarLogFatal(ex, true);
        }
    }
    
    
}
